home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1992 June: ROMin Holiday / ADC Developer CD (1992-06) (''ROMin Holiday'')_iso / Developer Connection - 06-1992.iso / Development Platforms / Apple II / Essentials / Dynamo 4.2 for GSBug 1.5b10 / app.builder / dispatch.a < prev    next >
Encoding:
Text File  |  1990-09-21  |  4.9 KB  |  266 lines  |  [TEXT/MPS ]

  1. ****************************************************************
  2. *                            *
  3. * buildapp.system hub.                    *
  4. *                            *
  5. * Apple II 8-bit application builder and launcher.        *
  6. * Copyright (C) 1990 Apple Computer.            *
  7. * Version 4.1                        *
  8. *                            *
  9. * Written by Eric Soldan, Apple II DTS            *
  10. *                            *
  11. ****************************************************************
  12.  
  13.         case    on
  14.         longi    off
  15.         longa    off
  16.         machine    m6502
  17.  
  18. * asmiigs dispatch.a -o :o:dispatch.obj
  19. * linkiigs -x :o:dispatch.obj -o :o:dispatch.lnk
  20. * makebiniigs :o:dispatch.lnk -o :o:dispatch.bin -org $2000
  21. * duplicateiigs -y -mac :o:dispatch.bin :
  22.  
  23. *** (mode bit assignments) **
  24.  
  25. * bit 0 = 0:  User wants ROM active
  26. * bit 0 = 1:  User wants a language card active
  27.  
  28. * bit 1 = 0:  Primary zero-page and language card (if bit 0 says language card)
  29. * bit 1 = 1:  Auxiliary zero-page and language card (if bit 0 says language card)
  30.  
  31. * bit 2 = 0:  Primary $D000 bank of language card (if bit 0 says language card)
  32. * bit 2 = 1:  Auxiliary $D000 bank of language card (if bit 0 says language card)
  33.  
  34. * bit 3 = 0:  Primary 48k
  35. * bit 3 = 1:  Auxiliary 48k
  36.  
  37. * bit 4 = 0:  Initialize aux stack pointer (stored at $101) to $FF
  38. * bit 4 = 1:  Leave aux stack pointer alone (already set up).
  39.  
  40. * bit 7 = 0:  Mode byte is for a segment.
  41. * bit 7 = 1:  Mode byte is for launching.
  42.  
  43. *****************************
  44.  
  45. mode        equ    $62
  46. dest        equ    $63        ;& $64
  47. len        equ    $65        ;& $66
  48. ptr        equ    $9D        ;& $9E
  49. objlen        equ    $9F        ;& $A0
  50.  
  51. off        equ    0
  52. on        equ    1
  53.  
  54. store80        equ    $C000        ;sta
  55. ramrd        equ    $C002        ;sta
  56. ramrdsw        equ    $C013        ;hi=1, aux48
  57. ramwrt        equ    $C004        ;sta
  58. ramwrtsw        equ    $C014        ;hi=1, aux48
  59. altzp        equ    $C008        ;sta
  60. rdaltzp        equ    $C016
  61. pri        equ    $C054        ;page1
  62. aux        equ    $C055        ;page2
  63.  
  64.  
  65. * second read from switch does writing.
  66. rdlans        equ    $C080        ;read lan-card, sec-$d0 bank,
  67. *                    ;write rom (lan-card protect)
  68. wrlans        equ    $C081        ;write lan-card, sec-$D0
  69. *                    ;bank, read rom.
  70. romsel        equ    $C082        ;read/write rom.
  71. rdwrlans        equ    $C083        ;read/write lan-card,
  72. *                    ;sec-$D0 bank.
  73. * $C084-$C087 duplicates of above.
  74. rdlanp        equ    rdlans+8        ;pri-$D0 bank.
  75. wrlanp        equ    wrlans+8        ;pri-$D0 bank.
  76. rdwrlanp        equ    rdwrlans+8    ;pri-$D0 bank.
  77.  
  78.  
  79. *************************
  80.  
  81. start        PROC
  82.  
  83.         jmp    start0
  84.         dc.b    $EE,$EE
  85.         dc.b    65
  86.         dc.b    13,'BUILDAPP.TEXT'
  87.         ds.b    65-14
  88.  
  89.         dc.w    end
  90.  
  91. start0        lda    end        ;First mode byte.
  92.         and    #16
  93.         bne    @a
  94.  
  95.         php            ;Disable interrupts.
  96.         sei
  97.  
  98.         sta    altzp+on        ;Initialize aux stack pointer.
  99.         ldx    #$FF
  100.         stx    $101
  101.         tsx            ;Store current stack pointer.
  102.         inx            ;Adjust for php.
  103.         stx    $100
  104.         sta    altzp+off    ;Back to primary ram.
  105.  
  106.         plp            ;Restore interrupt status.
  107.  
  108. @a        clc
  109.         jsr    selectzp
  110.  
  111.         bit    wrlans
  112.         bit    wrlans        ;Read rom/write ram.
  113.         sta    ramrd+off
  114.         sta    ramwrt+off
  115.  
  116.         ldy    #<end
  117.         lda    #>end
  118.  
  119. movefilez    sty    ptr
  120.         sta    ptr+1
  121.  
  122. movefile        sta    $C004        ;Read pri48.
  123.         ldy    #4
  124. @m        lda    (ptr),y
  125.         sta    |mode,y
  126.         dey
  127.         bpl    @m
  128.  
  129.         jsr    selbank
  130.         lda    mode
  131.         bpl    mfile
  132. jmpaddr        jmp    (dest)        ;Start it.
  133.  
  134. mfile        equ    *
  135.         lda    ptr
  136.         clc
  137.         adc    #5
  138.         sta    ptr
  139.         bcc    @a
  140.         inc    ptr+1
  141.  
  142. @a        ldy    #0
  143.         ldx    len        ;So dec test works.
  144.         inx
  145. @b        dex
  146.         bne    @c
  147.         dec    len+1
  148.         bmi    @d
  149. @c        lda    (ptr),y
  150.         sta    (dest),y
  151.         iny
  152.         bne    @b
  153.         inc    ptr+1
  154.         inc    dest+1
  155.         bne    @b
  156. @d        tya
  157.         clc
  158.         adc    ptr
  159.         sta    ptr
  160.         bcc    @e
  161.         inc    ptr+1
  162.  
  163. @e        bit    mode        ;See if this segment is an initial segment.
  164.         bvc    movefile        ;It isn't, so go move next file.
  165.  
  166.         lda    ptr+1        ;Save the really important 0-page.
  167.         pha
  168.         lda    ptr
  169.         pha
  170.         jsr    jmpaddr        ;Call the initial segment.
  171.         pla
  172.         tay
  173.         pla
  174.         jmp    movefilez    ;Keep going.
  175.  
  176. *************************
  177.  
  178. selbank        bit    romsel
  179.         lda    mode
  180.         lsr    a
  181.         bcc    @a        ;User wants rom selected.
  182.         lsr    a
  183.         jsr    selectzp        ;Select which 0page.
  184.         bit    rdwrlans        ;Read/write lan, sec $D0.
  185.         bit    rdwrlans
  186.         lda    mode
  187.         and    #4
  188.         beq    @a
  189.         bit    rdwrlanp        ;Read/write lan, pri $D0
  190.         bit    rdwrlanp
  191. @a        lda    mode        ;Select pri or aux 48k.
  192.         and    #8
  193.         beq    @b
  194.         sta    $C005        ;Write aux48.
  195. @b        rts
  196.  
  197. *************************
  198.  
  199. selectzp        ror    a        ;cclear=pri / cset=alt
  200.         eor    rdaltzp
  201.         bpl    @rts        ;already have correct 0page.
  202.  
  203.         ldy    #4        ;Save the 0page we need.
  204. @a        lda    mode,y
  205.         sta    @mode,y
  206.         lda    ptr,y
  207.         sta    @ptr,y
  208.         dey
  209.         bpl    @a
  210.  
  211.         pla            ;First, save the return address, since
  212.         sta    @retaddr        ;it will end up on the wrong stack, and
  213.         pla            ;therefore we would not be able to return.
  214.         sta    @retaddr+1
  215.  
  216.         php            ;Switch which stack is being used.
  217.         pla
  218.         sta    @intstat
  219.  
  220.         tsx            ;What is that darned stack pointer anyway?
  221.         asl    rdaltzp        ;Which 0page are we on currently?
  222.  
  223.         sei            ;Now we are getting serious.
  224.         sta    altzp+on
  225.         bcc    @b        ;We were in pri-mem before.
  226.  
  227.         stx    $101        ;Save the current aux stack pointer, since
  228.         ldx    $100        ;we will be changing to pri-mem.  Then
  229.         sta    altzp+off    ;choose primary ram.
  230.         bcs    @c
  231.  
  232. @b        stx    $100
  233.         ldx    $101
  234.  
  235. @c        txs            ;Set the stack pointer
  236.         lda    @intstat
  237.         pha
  238.         plp            ;Now we can lighten up.
  239.  
  240.         lda    @retaddr+1    ;Show the way home.
  241.         pha
  242.         lda    @retaddr
  243.         pha
  244.  
  245.         ldy    #4        ;Save the 0page we need.
  246.         lda    @mode,y
  247.         sta    mode,y
  248.         lda    @ptr,y
  249.         sta    ptr,y
  250.         dey
  251.         bpl    @c
  252.  
  253. @rts        rts
  254.  
  255. @mode        ds.b    5
  256. @ptr        ds.b    5
  257. @retaddr        ds.b    2
  258. @intstat        ds.b    1
  259.  
  260. end        equ    *
  261.  
  262.         endp
  263.  
  264.         END
  265.  
  266.